#include<iostream>
#include<signal.h>
#include<unistd.h>

using namespace std;

void printPending(sigset_t &pending)
{
    for (int sig = 1; sig <= 31; sig++)
    {
        if (sigismember(&pending, sig))
        {
            cout << "1";
        }
        else
        {
            cout << "0";
        }
    }
    cout << endl;
}

void handlers(int sig)
{
    cout<<"捕获到一个信号："<< sig << endl;
    cout<<"捕获到一个信号："<< sig << endl;
    cout<<"捕获到一个信号："<< sig << endl;

    sigset_t pending;
    

    int count = 10;
    while(count)
    {
        sigpending(&pending);
        printPending(pending);
        sleep(1);
        count--;
    }
}

volatile int flag = 0;

void changeFlag(int n)
{
    cout << "flag: "<<flag;
    flag = 1;
    cout<<"->  flag: "<<flag<<endl;
}
int main()
{

    signal(2,changeFlag);
    while(!flag);
    cout<<"flag = "<<flag<<" 正常退出！"<<endl;


    // cout << "pid: "<< getpid()<<endl;
    // struct sigaction act,oact;

    // act.sa_flags = 0;
    // sigemptyset(&act.sa_mask);
    // act.sa_handler = handlers;

    // sigaddset(&act.sa_mask,7);
    // sigaddset(&act.sa_mask,3);
    // sigaddset(&act.sa_mask,4);
    // sigaddset(&act.sa_mask,5);
    // sigaddset(&act.sa_mask,6);

    // sigaction(2,&act,&oact);

    // //cout << "default action : " << oact.__sigaction_handler << endl;

    // while(1)
    // {
    //     sleep(1);
    // }

    return 0;
}
